extends Control

# 节点引用
@onready var username_input = %UsernameInput
@onready var email_input = %EmailInput
@onready var email_label = %EmailLabel
@onready var password_input = %PasswordInput
@onready var login_button = %LoginButton
@onready var register_button = %RegisterButton
@onready var error_label = %ErrorLabel

# 当前模式
var is_register_mode = false

# 信号定义
signal login_successful(user)
signal login_failed(message)

func _ready():

	# 连接按钮信号
	login_button.pressed.connect(_on_login_button_pressed)
	register_button.pressed.connect(_on_register_button_pressed)

	# 清除错误信息
	_clear_error()

	# 如果有用户数据和令牌，直接跳转到home页面
	if GlobalAPI.user_data != null and GlobalAPI.access_token != null and not GlobalAPI.access_token.is_empty():
		get_tree().call_deferred("change_scene_to_file","res://src/ui/home/home.tscn")
		return

	# 检查后端健康状态
	GlobalAPI.check_backend_health()

# 登录按钮点击事件
func _on_login_button_pressed() -> void:
	# 如果是注册模式，切换回登录模式
	if is_register_mode:
		_toggle_register_mode(false)
		return

	# 如果是登录模式，执行登录
	var username = username_input.text.strip_edges()
	var password = password_input.text.strip_edges()

	# 验证输入
	if username.is_empty() or password.is_empty():
		_show_error("用户名和密码不能为空")
		return

	# 执行登录
	login(username, password)

# 注册按钮点击事件
func _on_register_button_pressed() -> void:
	# 如果不是注册模式，切换到注册模式
	if not is_register_mode:
		_toggle_register_mode(true)
		return

	# 如果是注册模式，执行注册
	var username = username_input.text.strip_edges()
	var email = email_input.text.strip_edges()
	var password = password_input.text.strip_edges()

	# 验证输入
	if username.is_empty() or password.is_empty():
		_show_error("用户名和密码不能为空")
		return

	if email.is_empty():
		_show_error("邮箱不能为空")
		return

	# 实现注册功能
	register(username, email, password)

# 登录函数
func login(username: String, password: String) -> void:
	_show_loading(true)
	_clear_error()

	# 使用GlobalAPI进行登录
	var result = await GlobalAPI.login(username, password)

	_show_loading(false)

	# 处理响应
	if not result.success:
		_show_error(result.message)
		login_failed.emit(result.message)
		return

	# 发送登录成功信号
	login_successful.emit(GlobalAPI.user_data)

	# 登录成功处理
	_on_login_success()

# 注册函数
func register(username: String, email: String, password: String) -> void:
	_show_loading(true)
	_clear_error()

	# 使用GlobalAPI进行注册
	var result = await GlobalAPI.register(username, email, password)

	_show_loading(false)

	# 处理响应
	if not result.success:
		_show_error(result.message)
		return

	# 显示成功对话框
	_show_success_dialog("注册成功", "恭喜您注册成功！\n\n用户名：" + username + "\n邮箱：" + email + "\n\n点击确认返回登录界面。")

	# 清除输入
	username_input.text = ""
	password_input.text = ""
	email_input.text = ""

# 检查令牌是否有效
func check_token() -> bool:
	return await GlobalAPI.check_session()

# 刷新令牌
func refresh_token_request() -> bool:
	return await GlobalAPI.refresh_token_request()

# 检查后端健康状态
func _check_backend_health() -> void:
	var result = await GlobalAPI.check_backend_health()
	if result.status != "ok":
		_show_error("无法连接到后端服务")

# 登录成功处理
func _on_login_success() -> void:
	print("登录成功，用户: ", GlobalAPI.user_data["username"])
	# 切换到home页面
	get_tree().change_scene_to_file("res://src/ui/home/home.tscn")

# 显示错误信息
func _show_error(message: String) -> void:
	if error_label:
		error_label.text = message
		error_label.modulate = Color(1, 0.3, 0.3)
		error_label.visible = true

# 显示成功消息
func _show_success(message: String) -> void:
	if error_label:
		error_label.text = message
		error_label.modulate = Color(0.3, 1, 0.3)  # 绿色
		error_label.visible = true

# 显示成功对话框
func _show_success_dialog(title: String, message: String) -> void:
	var dialog = AcceptDialog.new()
	dialog.title = title
	dialog.dialog_text = message
	dialog.dialog_autowrap = true

	# 添加到场景中
	add_child(dialog)

	# 显示对话框
	dialog.popup_centered(Vector2(300, 150))

	# 连接确认信号
	dialog.confirmed.connect(func():
		_toggle_register_mode(false)  # 返回登录模式
		dialog.queue_free()  # 删除对话框
	)

# 清除错误信息
func _clear_error() -> void:
	if error_label:
		error_label.text = ""
		error_label.visible = false

# 切换注册/登录模式
func _toggle_register_mode(register_mode: bool) -> void:
	is_register_mode = register_mode

	# 显示/隐藏邮箱输入框
	email_label.visible = register_mode
	email_input.visible = register_mode

	# 清除错误信息
	_clear_error()

	# 清除所有输入
	username_input.text = ""
	password_input.text = ""
	email_input.text = ""

	# 更新按钮文本
	if register_mode:
		register_button.text = "提交注册"
		login_button.text = "返回登录"
	else:
		register_button.text = "注册"
		login_button.text = "登录"

# 显示/隐藏加载状态
func _show_loading(is_loading: bool) -> void:
	if is_loading:
		if login_button:
			login_button.disabled = true
		if register_button:
			register_button.disabled = true
		# 不需要显示loading遮罩，由AwaitableHTTPRequest自动处理
	else:
		if login_button:
			login_button.disabled = false
		if register_button:
			register_button.disabled = false
		# 不需要隐藏loading遮罩，由AwaitableHTTPRequest自动处理

# 退出登录
func logout() -> void:
	# 使用GlobalAPI清除所有数据
	GlobalAPI.clear_all_data()
	# 返回登录界面
	get_tree().change_scene_to_file("res://src/ui/login/login.tscn")
